热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大写字母|我爱你_React工程化——webpack构建react工程化——react脚手架解析——函数组件间的通信父—子——函数组件事件绑定——todolist案例

篇首语:本文由编程笔记#小编为大家整理,主要介绍了React工程化——webpack构建react工程化——react脚手架解析——函数组件间的通信父—子——函数组件事件绑定——todolist

篇首语:本文由编程笔记#小编为大家整理,主要介绍了React工程化——webpack构建react工程化——react脚手架解析——函数组件间的通信父—子——函数组件事件绑定——todolist案例相关的知识,希望对你有一定的参考价值。


类组件,函数组件
标签绑定事件,事件的绑定的this指向问题。
父子组件通信


webpack

引入核心库,babel




react脚手架

React团队维护开发的create-react-app来创建React新的单页应用项目的最佳方式。
React脚手架(create-react-app)意义
💘 脚手架是官方推荐,零配置,无需手动配置繁琐的工具即可使用
💘 充分利用 Webpack,Babel,ESLint等工具辅助项目开发
💘 关注业务,而不是工具配置,提升创建项目时间,把更多的时间用到开发中



create-react-app会配置你的开发环境,以便使你能够使用最新的
Javascript特性,提供良好的开发体验,并为生产环境优化你的应用程序。你需要在你的机器上安装 Node >= 16


项目名称全小写,不能用空格大写字母 现在使用脚手架创建的react版本为最新版本18.x

npx create-react-app myapp // 创建项目,时间会有点的久
cd myapp // 进入到安装项目中
npm start // 启动项目

现在我的项目启动是:

yarn start
yarn build



💘建议在工作中,不要创建 npx create-react-app 工具来创建项目,而是使用原项目进行,create-react-app工具,它只能创建最新版本的react项目

yarn包管理工具
## 安装一下 yarn工具,它不是自带的,需要安装
npm i -g yarn



组件。

组件允许你将 UI 拆分为独立可复用的代码片段,并对每个片段进行独立构思。从概念上类似于 Javascript 类或函数。它接受任意的入参(props),并返回用于描述页面展示内容的 React元素(jsx)。 定义好的组件一定要有返回值


  • react中定义组件的方式2种
    • 💘函数组件(无状态组件/UI组件)
    • 💘类组件(状态组件/容器组件)



函数创建组件

如果你在vscode中安装了jsx插件,则可以用 rfc创建函数组件
快捷键:rcf
✅函数组件(无状态组件):使用JS的函数创建组件
✅函数名称必须以大写字母开头,
✅函数组件必须有返回值(jsx)/null,表示该组件的结构,且内容必须有顶级元素

import React from 'react';
const App = () =>
return (
<div>
<h1>我爱你</h1>
</div>
);

export default App;

类创建组件

✅使用ES6语法的class创建的组件(状态组件)
✅类名称必须要大写字母开头
✅类组件要继承React.Component父类&#xff0c;从而可以使用父类中提供的方法或者属性
✅类组件必须提供 render 方法&#xff0c;用于页面结构渲染&#xff0c;结构必须要有顶级元素&#xff0c;且必须return去返回

import React, Component from &#39;react&#39;;
class App extends Component
render()
return (
<div>
<h1>我爱你</h1>
</div>
);


export default App;



函数组件间的通信——父传子

父子组件传值(props[只读属性])
1️⃣组件间传值&#xff0c;在React中是通过只读属性 props 来完成数据传递的。
2️⃣props&#xff1a;接受任意的入参&#xff0c;并返回用于描述页面展示内容的 React元素。
3️⃣props中的数据是不能被修改的&#xff0c;只能读取。
4️⃣props是一个单向数据流。 父流向子&#xff0c;子不能直接去修改props中的数据
通过自定义属性&#xff0c;可以向子组件传递数据 &#xff0c;此数据它是单向数据流&#xff0c;子组件不能直接修改

import React from &#39;react&#39;;
function fn()
return console.log("fn");

const Child &#61; (props) &#61;>
let a &#61; props//也可以通过解构的方式将变量赋值
return (
<div>
<h2>props.a</h2>
<h2>a</h2>
</div>
);

const App &#61; () &#61;>
return (
<div>
<Child a&#61;"aaaa" str&#61;"110" c&#61;key:"我爱你" className&#61;"active" fn&#61;fn num&#61;120 />
</div>
);

export default App;


类组件间的通信——父传子

&#x1f4a5;子组件它是通过 成员属性this.props来接受参数的
必须在render() 里面渲染使用。

import React, Component from &#39;react&#39;;
class Child extends Component
render()
let title,fn &#61; this.props;//必须解构使用&#xff0c;注意this指向
console.log(fn);
console.log(fn());
console.log(fn()());
return (
<div>
<div>
title
</div>
<div>
fn()()
</div>
</div>
);


class App extends Component
//fn &#61; function(params) return params
fn &#61; (arg)&#61;>()&#61;>()&#61;>arg;//柯理化
render()
return (
<div>
<Child title&#61;123 fn&#61;this.fn(100)></Child>
</div>
);


export default App;



注意:


  • 类组件的父组件成员属性值的赋值。
  • 子组件在render() 进行解构赋值使用。
  • 函数到底是返回数值还是返回一个函数要清楚。
  • 通过给子组件添加方法属性&#xff0c;注意自己需不需要加&#xff08;&#xff09;



函数组件事件绑定

React 元素的事件处理和 DOM 元素的很相似&#xff0c;但是有一点语法上的不同:


  • React 事件的命名采用小驼峰式&#xff0c;而不是纯小写。

onClick onChange

  • 使用 JSX 语法时你需要传入一个函数作为事件处理函数&#xff0c;而不是一个字符串。

onClick&#61;clickHandler// 注函数或方法不能用小括号
onClick&#61;this.fn // 绑定实现方法一定要用函数或方法

  • 一般情况下&#xff0c;绑定的事件方法是不会加小括号&#xff0c;如果要加小括号&#xff0c;则定义绑定方法时&#xff0c;一定要返回一函数

import React from &#39;react&#39;;
const Child &#61; (props) &#61;>
let num &#61; props
// console.log(num);
return (
<div>
<h2>num</h2>
</div>
);

const App &#61; () &#61;>
let num &#61; 1;
const clickHandler &#61; ()&#61;>
// console.log(&#43;&#43;num);
return ()&#61;>
console.log(&#43;&#43;num);


return (
<div>
<Child num&#61;num></Child>
/* */
<button onClick&#61;clickHandler() >点我&#43;1</button>
</div>
);

export default App;

类组件事件绑定

&#x1f496;类组件与函数组件绑定事件是差不多的&#xff0c;只是在类组件中绑定事件函数的时候类需要用到this&#xff0c;代表指向当前的类的引用&#xff0c;在函数中不需要调用this

import React, Component from &#39;react&#39;;
class Child extends Component
render()
let num &#61; this.props
return (
<div>
<h1>num</h1>
</div>
);


class App extends Component
num&#61;1;
clickHandler &#61; ()&#61;>
this.num&#43;&#43;;
console.log(this.num);
console.log(this);//App
this.forceUpdate()//通知视图更新

render()
return (
<div>
<Child num&#61;this.num></Child>
<button onClick&#61;this.clickHandler>&#43;1</button>
</div>
);


export default App;

例如todo事件的完成&#xff1a;


  • 建议使用 箭头函数定义成员属性&#xff0c;因为传统的function找不见这个this的指向问题

clickHandler &#61; ()&#61;>
console.log(this);//App

clickHandler &#61; function ()
console.log(this);//undefined

值得注意的是&#xff1a;react事件&#xff0c;在没有写小括号的时候会主动的把event事件对象传给你

clickHandler &#61; (event)&#61;>
console.log(event.target);//



onKeyUp事件完成todolist功能


  • 类组件中提供一个方法&#xff0c;可以强制让视图更新
  • this.forceUpdate()//通知视图更新

todos &#61; [id:Date.now(),msg:"我爱你"]
enterkHandler &#61; (event)&#61;>
if(event.keyCode &#61;&#61;&#61; 13)
this.todos.unshift(
id:Date.now(),
msg:event.target.value.trim()
)
event.target.value &#61; &#39;&#39;

this.forceUpdate()//通知视图更新


给input添加键盘事件&#xff0c;给button添加点击事件


TODOLIST案例实现

import React, Component from &#39;react&#39;;
class App extends Component
todos &#61; [id:Date.now(),msg:"我爱你"]
enterkHandler &#61; (event)&#61;>
if(event.keyCode &#61;&#61;&#61; 13)
this.todos.unshift(
id:Date.now(),
msg:event.target.value.trim()
)
event.target.value &#61; &#39;&#39;

this.forceUpdate()//通知视图更新


onClickHanler &#61; (evt)&#61;>
this.todos &#61; this.todos.filter((item)&#61;>
item.id !&#61; evt.target.parentElement.id
)
console.log(this.todos);
this.forceUpdate()//通知视图更新

render()
return (
<div>
<input type&#61;"text" onKeyUp&#61;this.enterkHandler/>
<ul>
this.todos.map(item&#61;>(<li key&#61;item.id id&#61;item.id>item.msg<button onClick&#61;this.onClickHanler>x</button></li>))
</ul>
</div>
);


export default App;

推荐阅读
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文探讨了C语言中指针的应用与价值,指针在C语言中具有灵活性和可变性,通过指针可以操作系统内存和控制外部I/O端口。文章介绍了指针变量和指针的指向变量的含义和用法,以及判断变量数据类型和指向变量或成员变量的类型的方法。还讨论了指针访问数组元素和下标法数组元素的等价关系,以及指针作为函数参数可以改变主调函数变量的值的特点。此外,文章还提到了指针在动态存储分配、链表创建和相关操作中的应用,以及类成员指针与外部变量的区分方法。通过本文的阐述,读者可以更好地理解和应用C语言中的指针。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
author-avatar
PHP界的一股清流
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有